package 剑指offer;


import 栈和队列.CalSpan;

import java.util.HashMap;

/**
 * @description:
 * @author: ywk
 * @date: 2020-10-25
 */
public class 两数之和 {
    /**
     * 给出一个整数数组，请在数组中找出两个加起来等于目标值的数，
     * 你给出的函数twoSum 需要返回这两个数字的下标（index1，index2），需要满足 index1 小于index2.。注意：下标是从1开始的
     * 假设给出的数组中只存在唯一解
     * 例如：
     * 给出的数组为 {20, 70, 110, 150},目标值为90
     * 输出 index1=1, index2=2
     */
    public static void main(String[] args) {
        CalSpan.printArr(twoSum(new int[]{-1, 2, 1, 0}, 0));
    }

    public static int[] twoSum(int[] numbers, int target) {
        // write code here
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            map.put(number, i);
        }


        int[] val = new int[2];
        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            if (map.get(target - number) != null && map.get(target - number) != i) {
                val[0] = i + 1;
                val[1] = map.get(target - number) + 1;
                break;
            }
        }
        return val;
    }
}
